With the react-spring library, we can render animations in our React app easily.
In this article, we’ll take a look at how to get started with react-spring.
Spring Component and Interpolation
We can use the Spring component to interpolate anything.
For example, we can write:
import React from "react";
import { Spring } from "react-spring/renderprops";
export default function App() {
return (
<div>
<Spring
from={{
width: 100,
padding: 0,
background: "linear-gradient(to right, #30e8bf, #ff8235)",
transform: "translate3d(400px,0,0) scale(2) rotateX(90deg)",
boxShadow: "0px 100px 150px -10px #2D3747",
borderBottom: "0px solid white",
shape: "M20,380 L380,380 L380,380 L200,20 L20,380 Z",
textShadow: "0px 5px 0px white"
}}
to={{
width: "auto",
padding: 20,
background: "linear-gradient(to right, #009fff, #ec2f4b)",
transform: "translate3d(0px,0,0) scale(1) rotateX(0deg)",
boxShadow: "0px 10px 20px 0px rgba(0,0,0,0.4)",
borderBottom: "10px solid #2D3747",
shape: "M20,20 L20,380 L380,380 L380,20 L20,20 Z",
textShadow: "0px 5px 15px rgba(255,255,255,0.5)"
}}
>
{(props) => <div style={props}></div>}
</Spring>
</div>
);
}
We have the from prop with the initial styles that we apply to the render props function’s div.
We also have the to prop with the styles that are applied when the animation is done.
props has the styles that are computed during the animation.
And we apply them by passing them into the style prop.
Spring Component Config
We can configure the Spring component with some preset values.
They include:
- config.default —
{ tension: 170, friction: 26 } - config.gentle —
{ tension: 120, friction: 14 } - config.wobbly —
{ tension: 180, friction: 12 } - config.stiff —
{ tension: 210, friction: 20 } - config.slow —
{ tension: 280, friction: 60 } - config.molasses —
{ tension: 280, friction: 120 }
For example, we can write:
import React from "react";
import { config, Spring } from "react-spring/renderprops";
export default function App() {
return (
<div>
<Spring config={config.wobbly} from={{ opacity: 0 }} to={{ opacity: 1 }}>
{(props) => <div style={props}>hello</div>}
</Spring>
</div>
);
}
to set the configuration with the config prop.
The following properties can be configured:
mass— spring-mass, defaults to 1tension—spring energetic load, default value 170friction— spring resistance, default value 26clamp— whentrue, stops the spring once it overshoots its boundaries, defaults tofalseprecision—precision, defaults to 0.01velocity— initial velocity, defaults to 0delay— delay, defaults to 0duration— if > than 0 will switch to a duration-based animation instead of spring physics, defaults toundefinedeasing—linear by default, you can use any easing you want, defaults value ist => t
We can configure it with our own object:
import React from "react";
import { Spring } from "react-spring/renderprops";
export default function App() {
return (
<div>
<Spring
config={{ tension: 0, friction: 2, precision: 0.1 }}
from={{ opacity: 0 }}
to={{ opacity: 1 }}
>
{(props) => <div style={props}>hello</div>}
</Spring>
</div>
);
}
And we can configure it with our own function:
import React from "react";
import { config, Spring } from "react-spring/renderprops";
export default function App() {
return (
<div>
<Spring
to={{ opacity: 1, width: 100, backgroundColor: "red" }}
config={(key) => (key === "width" ? config.slow : config.wobbly)}
from={{ opacity: 0, width: 0, backgroundColor: "red" }}
>
{(props) => <div style={props}>hello</div>}
</Spring>
</div>
);
}
We get the key from the styles and return the config based on that.
Conclusion
We can use the Spring component with various styles and config to customize our animation.